/******************************************************************************
** 公司名称：天津柯迪斯科技有限公司
** 版权信息：
** 文件名称： bsp_LCD.c
** 模块名称： KD786_N32L406仪表LCD驱动模块
** 版 本 号： V1.0
** 作    者： 蒲磊
** 备    注： LCD屏驱动芯片ST7789V
** 修改记录： 版本     修改人      时间         修改内容
**
******************************************************************************/

/******************************************************************************
* 头文件
******************************************************************************/
#include "bsp_LCD.h"
#include "Config.h"
#include <stdio.h>
/******************************************************************************
* 宏定义
******************************************************************************/

/******************************************************************************
* 类型定义
******************************************************************************/

/******************************************************************************
* 函数声明
******************************************************************************/
static void vBsp_LCD_Chip_Init(void);
static void vBsp_LCD_Send_Byte(uint8_t Byte);
//static void vBsp_LCD_WriteMultiBit_Forward(uint32_t Data,uint8_t Byte,uint8_t Bit,uint8_t Length);
extern void vBsp_DelayMs(uint32_t DelayTime);		/*系统MS级延时函数，该函数在bsp.c文件中*/
/******************************************************************************
* 全局变量定义
******************************************************************************/
uint8_t gucLCD_Buffer[20] = {0};        /*LCD缓存，160*2 = 320 , 320/8 = 40，对应芯片 A/B RAM0-RAM159 */
/**********************************0       1      2      3      4      5      6      7      8      9    空格*****************/
/**********************************A       B      C      D      E      F      G      H      I      J     K*******************/
/**********************************L       M      N      O      P      Q      R      S      T      U     V*******************/
/**********************************W       X      Y      Z      -                                         *******************/
/**********************************a       b      c      d      e      f      g      h      i      j     k*******************/
/**********************************l       m      n      o      p      q      r      s      t      u     v*******************/
/**********************************w       x      y      z                                                *******************/



const uint16_t gusSegTab_13[] = {0xFFf0,0x3E00,0xFBE8,0xFFA8,0xBE38,0xEFB8,0xEFF8,0xFE00,0xFFF8,0xFFB8,0x0000,
                                 0xFEF8,0x8FF8,0xE3F0,0x3FE8,0xEBF8,0xD8F8,0xFFB8,0xBEF8,0x00E0,0x7780,0x0000,
                                 0X83F0,0x0000,0x0EE8,0xFFF0,0xF8F8,0xFE38,0x08E8,0xEFB8,0x8BF8,0xBFF0,0x0000,
                                 0x0000,0x0000,0xBFB8,0x0000,0x1820






                                };
/*********************************0     1    2    3    4    5    6    7    8    9   空格*****************/
/*********************************A     B    C    D    E    F    G    H    I    J   K*******************/
/*********************************L     M    N    O    P    Q    R    S    T    U   V*******************/
/*********************************W     X    Y    Z    -                             *******************/
/*********************************a     b    c    d    e    f    g    h    i    j   k*******************/
/*********************************l     m    n    o    p    q    r    s    t    u   v*******************/
/*********************************w     x    y    z                                  *******************/


const uint8_t  gucSegTab_7[]  = {
    0xFC, 0x60, 0xDA,0xF2,0x66,0xB6,0xBE,0xE0,0xFE,0xF6,0x00,
    0xEE, 0x3E, 0x9C,0x7A,0x9E,0x8E,0x7C,0x6E,0x08,0x70,0x5E,
    0x1C, 0xAA, 0XEC,0xFC,0xCE,0xE6,0x0A,0x26,0x1E,0x7C,0x46,
    0x56, 0x6C, 0x76,0x92,0x02,
    0xEE, 0x3E, 0X1A,0x7A,0x9E,0x8E,0x7C,0x2E,0x20,0x70,0x5E,
    0x1C, 0xAA, 0x2A,0x3A,0xCE,0xE6,0x0A,0x26,0x1E,0x7C,0x46,
    0x56, 0x6C, 0x76,0x92
};


/*****************************************************************************
* 函数实现 - global ('extern') and local ('static')
******************************************************************************/

/******************************************************************************
** 功  能：LCD初始化
** 参  数：无
** 返回值：无
** 备  注：
******************************************************************************/
void vBsp_LCD_Init(void)
{
    vBsp_LCD_Chip_Init();
}


/******************************************************************************
** 功  能：LCD芯片初始化
** 参  数：无
** 返回值：无
** 备  注：LCD屏驱动芯片IST3042，接口方式SPI
******************************************************************************/
static void vBsp_LCD_Chip_Init(void)
{
    LCD_VLCD_0;
    vBsp_LCD_Reset();
    LCD_CS_0;
    vBsp_LCD_Send_Byte(0xFE);       /*Preload命令，硬件复位后，必须先发这一条指令*/

    LCD_CS_1;

}




/******************************************************************************
** 功  能：LCD复位函数
** 参  数：无
** 返回值：无
** 备  注：
******************************************************************************/
void vBsp_LCD_Reset(void)
{
    LCD_RST_0;
    vBsp_DelayMs(5);
    LCD_RST_1;
    vBsp_DelayMs(5);
}

/******************************************************************************
** 功  能：LCD关屏函数
** 参  数：无
** 返回值：无
** 备  注：
******************************************************************************/
void vBsp_LCD_OFF(void)
{
    vBsp_LCD_Clear();               /*清屏*/
    LCD_VLCD_1;                     /*撤掉屏的驱动电压*/
}

/******************************************************************************
** 功  能：向LCD屏发送一个字节
** 参  数：Byte-要发送的数据
** 返回值：无
** 备  注：
******************************************************************************/
uint8_t gucTestByte;
static void vBsp_LCD_Send_Byte(uint8_t Byte)
{
    uint8_t n;
    gucTestByte = Byte;
    for(n = 0; n < 8; n++)
    {
        LCD_CLK_0;
        __NOP;
        __NOP;
        __NOP;
        if(Byte & 0x80) /*高位在前发送*/
        {
            LCD_DI_1;
        }
        else
        {
            LCD_DI_0;
        }
        Byte <<= 1;
        LCD_CLK_1;      /*时钟上升沿锁存数据*/
        __NOP;
        __NOP;
        __NOP;
        LCD_CLK_0;
        __NOP;
        __NOP;
        __NOP;
    }
    LCD_DI_1;
    __NOP;
    __NOP;
    __NOP;
    LCD_CLK_1;          /*芯片要求传输完1字节后，要有一个虚应答位，因此需要再输出一个时钟*/
    __NOP;
    __NOP;
    __NOP;
    LCD_CLK_0;
    __NOP;
    __NOP;
    __NOP;
}
//static void vBsp_LCD_Send_Byte(uint8_t Byte)
//{
//    uint8_t n;

//    LCD_CLK_0;
//	__NOP;__NOP;__NOP;

//    for(n = 0; n < 8; n++)
//    {
//        if(Byte & 0x80) /*高位在前发送*/
//        {
//            LCD_DI_1;
//        }
//        else
//        {
//            LCD_DI_0;
//        }
//        Byte <<= 1;
//        LCD_CLK_1;      /*时钟上升沿锁存数据*/
//		__NOP;__NOP;__NOP;
//        LCD_CLK_0;
//		__NOP;__NOP;__NOP;
//    }
//    LCD_CLK_1;          /*芯片要求传输完1字节后，要有一个虚应答位，因此需要再输出一个时钟*/
//	__NOP;__NOP;__NOP;
//    LCD_CLK_0;
//	__NOP;__NOP;__NOP;
//}


/*模仿老架构的方法刷新，解决偶发的花屏问题*/
static void vLCD_start()
{
    LCD_CS_1;
    LCD_CLK_0;
    __NOP;
    __NOP;
    __NOP;
    LCD_CS_0;
}
//---------------------------------
static void vLCD_stop()
{
    LCD_CLK_0;
    __NOP;
    __NOP;
    __NOP;
    LCD_CS_0;
    LCD_CS_1;
}
/******************************************************************************
** 功  能：LCD刷新
** 参  数：将LCD缓存写入到LCD屏寄存器，刷新显示
** 返回值：无
** 备  注：该函数需要定时调用。
******************************************************************************/
void vBsp_LCD_Refresh(void)
{
    uint8_t n;

    vLCD_start();
    vBsp_LCD_Send_Byte(0xFE);
    vBsp_LCD_Send_Byte(0x80);       /*Data Point设为0*/
    vBsp_LCD_Send_Byte(0xC0);       /*此字节的最高位需要为0，表示后续发送的是数据*/
    vBsp_LCD_Send_Byte(0xD7);       /*DCK divider  default 4'b0111*/
    vBsp_LCD_Send_Byte(0xE0);       /*Device select default 1'b0*/
    vBsp_LCD_Send_Byte(0xE8);       /*Display control ALLON = 1'b0 ALLOFF=1'b0 DISPOFF=1'b0*/
    vBsp_LCD_Send_Byte(0xF0);
    vBsp_LCD_Send_Byte(0x78);

    for(n = 0; n < sizeof(gucLCD_Buffer); n++)
    {
        vBsp_LCD_Send_Byte(gucLCD_Buffer[n]);
    }

    vLCD_stop();
}


/*****************************************以下为LCD应用层函数*******************************************/

/******************************************************************************
** 功  能：写数码管显示 8段 或者 13段
** 参  数：Data-要写入的数据，N_order-写入的数码管索引，Length-要写入的位数
** 返回值：无
** 备  注：
******************************************************************************/
void vBsp_LCD_WriteSegment(uint32_t Data,enSEG_Nx_TYPE N_order,uint8_t Length)
{
    uint8_t n;
    uint8_t ucSegDisFlg = 0;

    for(n = 0; n < Length; n++)
    {
        if(Data & (Length > 8 ? 0x8000 : 0x80))
        {
            ucSegDisFlg = 1;
        }
        else
        {
            ucSegDisFlg = 0;
        }
        Data <<= 1;

        switch(N_order)
        {
        case SEG_N1:
        {
            switch(n)
            {

            case 0:
            {
                if(ucSegDisFlg)
                {
                    N1_A_ON ;
                }
                else
                {
                    N1_A_OFF ;
                }
                break;
            }
            case 1:
            {
                if(ucSegDisFlg)
                {
                    N1_B_ON ;
                }
                else
                {
                    N1_B_OFF ;
                }
                break;
            }
            case 2:
            {
                if(ucSegDisFlg)
                {
                    N1_C_ON ;
                }
                else
                {
                    N1_C_OFF ;
                }
                break;
            }
            case 3:
            {
                if(ucSegDisFlg)
                {
                    N1_D_ON ;
                }
                else
                {
                    N1_D_OFF ;
                }
                break;
            }
            case 4:
            {
                if(ucSegDisFlg)
                {
                    N1_E_ON ;
                }
                else
                {
                    N1_E_OFF ;
                }
                break;
            }
            case 5:
            {
                if(ucSegDisFlg)
                {
                    N1_F_ON ;
                }
                else
                {
                    N1_F_OFF ;
                }
                break;
            }
            case 6:
            {
                if(ucSegDisFlg)
                {
                    N1_G_ON ;
                }
                else
                {
                    N1_G_OFF ;
                }
                break;
            }
            case 7:
            {
                if(ucSegDisFlg)
                {

                }
                else
                {

                }
                break;
            }
            default:
                break;
            }

            break;
        }
        case SEG_N2:
        {
            switch(n)
            {
            case 0:
            {
                if(ucSegDisFlg)
                {
                    N2_A_ON ;
                }
                else
                {
                    N2_A_OFF ;
                }
                break;
            }
            case 1:
            {
                if(ucSegDisFlg)
                {
                    N2_B_ON ;
                }
                else
                {
                    N2_B_OFF ;
                }
                break;
            }
            case 2:
            {
                if(ucSegDisFlg)
                {
                    N2_C_ON ;
                }
                else
                {
                    N2_C_OFF ;
                }
                break;
            }
            case 3:
            {
                if(ucSegDisFlg)
                {
                    N2_D_ON ;
                }
                else
                {
                    N2_D_OFF ;
                }
                break;
            }
            case 4:
            {
                if(ucSegDisFlg)
                {
                    N2_E_ON ;
                }
                else
                {
                    N2_E_OFF ;
                }
                break;
            }
            case 5:
            {
                if(ucSegDisFlg)
                {
                    N2_F_ON ;
                }
                else
                {
                    N2_F_OFF ;
                }
                break;
            }
            case 6:
            {
                if(ucSegDisFlg)
                {
                    N2_G_ON ;
                }
                else
                {
                    N2_G_OFF ;
                }
                break;
            }
            case 7:
            {
                if(ucSegDisFlg)
                {
                    N2_H_ON ;
                }
                else
                {
                    N2_H_OFF ;
                }
                break;
            }
            case 8:
            {
                if(ucSegDisFlg)
                {
                    N2_I_ON ;
                }
                else
                {
                    N2_I_OFF ;
                }
                break;
            }
            case 9:
            {
                if(ucSegDisFlg)
                {
                    N2_J_ON ;
                }
                else
                {
                    N2_J_OFF ;
                }
                break;
            }
            case 10:
            {
                if(ucSegDisFlg)
                {
                    N2_K_ON ;
                }
                else
                {
                    N2_K_OFF ;
                }
                break;
            }
            case 11:
            {
                if(ucSegDisFlg)
                {
                    N2_L_ON ;
                }
                else
                {
                    N2_L_OFF ;
                }
                break;
            }
            case 12:
            {
                if(ucSegDisFlg)
                {
                    N2_M_ON ;
                }
                else
                {
                    N2_M_OFF ;
                }
                break;
            }
            default:
                break;
            }
            break;
        }
        case SEG_N3:
        {
            switch(n)
            {
            case 0:
            {
                if(ucSegDisFlg)
                {
                    N3_A_ON ;
                }
                else
                {
                    N3_A_OFF ;
                }
                break;
            }
            case 1:
            {
                if(ucSegDisFlg)
                {
                    N3_B_ON ;
                }
                else
                {
                    N3_B_OFF ;
                }
                break;
            }
            case 2:
            {
                if(ucSegDisFlg)
                {
                    N3_C_ON ;
                }
                else
                {
                    N3_C_OFF ;
                }
                break;
            }
            case 3:
            {
                if(ucSegDisFlg)
                {
                    N3_D_ON ;
                }
                else
                {
                    N3_D_OFF ;
                }
                break;
            }
            case 4:
            {
                if(ucSegDisFlg)
                {
                    N3_E_ON ;
                }
                else
                {
                    N3_E_OFF ;
                }
                break;
            }
            case 5:
            {
                if(ucSegDisFlg)
                {
                    N3_F_ON ;
                }
                else
                {
                    N3_F_OFF ;
                }
                break;
            }
            case 6:
            {
                if(ucSegDisFlg)
                {
                    N3_G_ON ;
                }
                else
                {
                    N3_G_OFF ;
                }
                break;
            }
            case 7:
            {
                if(ucSegDisFlg)
                {
                    N3_H_ON ;
                }
                else
                {
                    N3_H_OFF ;
                }
                break;
            }
            case 8:
            {
                if(ucSegDisFlg)
                {
                    N3_I_ON ;
                }
                else
                {
                    N3_I_OFF ;
                }
                break;
            }
            case 9:
            {
                if(ucSegDisFlg)
                {
                    N3_J_ON ;
                }
                else
                {
                    N3_J_OFF ;
                }
                break;
            }
            case 10:
            {
                if(ucSegDisFlg)
                {
                    N3_K_ON ;
                }
                else
                {
                    N3_K_OFF ;
                }
                break;
            }
            case 11:
            {
                if(ucSegDisFlg)
                {
                    N3_L_ON ;
                }
                else
                {
                    N3_L_OFF ;
                }
                break;
            }
            case 12:
            {
                if(ucSegDisFlg)
                {
                    N3_M_ON ;
                }
                else
                {
                    N3_M_OFF ;
                }
                break;
            }
            default:
                break;
            }

            break;
        }
        case SEG_N4:
        {
            switch(n)
            {
            case 0:
            {
                if(ucSegDisFlg)
                {
                    N4_A_ON ;
                }
                else
                {
                    N4_A_OFF ;
                }
                break;
            }
            case 1:
            {
                if(ucSegDisFlg)
                {
                    N4_B_ON ;
                }
                else
                {
                    N4_B_OFF ;
                }
                break;
            }
            case 2:
            {
                if(ucSegDisFlg)
                {
                    N4_C_ON ;
                }
                else
                {
                    N4_C_OFF ;
                }
                break;
            }
            case 3:
            {
                if(ucSegDisFlg)
                {
                    N4_D_ON ;
                }
                else
                {
                    N4_D_OFF ;
                }
                break;
            }
            case 4:
            {
                if(ucSegDisFlg)
                {
                    N4_E_ON ;
                }
                else
                {
                    N4_E_OFF ;
                }
                break;
            }
            case 5:
            {
                if(ucSegDisFlg)
                {
                    N4_F_ON ;
                }
                else
                {
                    N4_F_OFF ;
                }
                break;
            }
            case 6:
            {
                if(ucSegDisFlg)
                {
                    N4_G_ON ;
                }
                else
                {
                    N4_G_OFF ;
                }
                break;
            }
            case 7:
            {
                if(ucSegDisFlg)
                {
                    N4_H_ON ;
                }
                else
                {
                    N4_H_OFF ;
                }
                break;
            }
            case 8:
            {
                if(ucSegDisFlg)
                {
                    N4_I_ON ;
                }
                else
                {
                    N4_I_OFF ;
                }
                break;
            }
            case 9:
            {
                if(ucSegDisFlg)
                {
                    N4_J_ON ;
                }
                else
                {
                    N4_J_OFF ;
                }
                break;
            }
            case 10:
            {
                if(ucSegDisFlg)
                {
                    N4_K_ON ;
                }
                else
                {
                    N4_K_OFF ;
                }
                break;
            }
            case 11:
            {
                if(ucSegDisFlg)
                {
                    N4_L_ON ;
                }
                else
                {
                    N4_L_OFF ;
                }
                break;
            }
            case 12:
            {
                if(ucSegDisFlg)
                {
                    N4_M_ON ;
                }
                else
                {
                    N4_M_OFF ;
                }
                break;
            }
            default:
                break;
            }

            break;
        }
        case SEG_N5:
        {
            switch(n)
            {
            case 0:
            {
                if(ucSegDisFlg)
                {
                    N5_A_ON ;
                }
                else
                {
                    N5_A_OFF ;
                }
                break;
            }
            case 1:
            {
                if(ucSegDisFlg)
                {
                    N5_B_ON ;
                }
                else
                {
                    N5_B_OFF ;
                }
                break;
            }
            case 2:
            {
                if(ucSegDisFlg)
                {
                    N5_C_ON ;
                }
                else
                {
                    N5_C_OFF ;
                }
                break;
            }
            case 3:
            {
                if(ucSegDisFlg)
                {
                    N5_D_ON ;
                }
                else
                {
                    N5_D_OFF ;
                }
                break;
            }
            case 4:
            {
                if(ucSegDisFlg)
                {
                    N5_E_ON ;
                }
                else
                {
                    N5_E_OFF ;
                }
                break;
            }
            case 5:
            {
                if(ucSegDisFlg)
                {
                    N5_F_ON ;
                }
                else
                {
                    N5_F_OFF ;
                }
                break;
            }
            case 6:
            {
                if(ucSegDisFlg)
                {
                    N5_G_ON ;
                }
                else
                {
                    N5_G_OFF ;
                }
                break;
            }
            case 7:
            {
                if(ucSegDisFlg)
                {
                }
                else
                {
                }
                break;
            }
            default:
                break;
            }

            break;
        }
        case SEG_N6:
        {
            switch(n)
            {
            case 0:
            {
                if(ucSegDisFlg)
                {
                    N6_A_ON ;
                }
                else
                {
                    N6_A_OFF ;
                }
                break;
            }
            case 1:
            {
                if(ucSegDisFlg)
                {
                    N6_B_ON ;
                }
                else
                {
                    N6_B_OFF ;
                }
                break;
            }
            case 2:
            {
                if(ucSegDisFlg)
                {
                    N6_C_ON ;
                }
                else
                {
                    N6_C_OFF ;
                }
                break;
            }
            case 3:
            {
                if(ucSegDisFlg)
                {
                    N6_D_ON ;
                }
                else
                {
                    N6_D_OFF ;
                }
                break;
            }
            case 4:
            {
                if(ucSegDisFlg)
                {
                    N6_E_ON ;
                }
                else
                {
                    N6_E_OFF ;
                }
                break;
            }
            case 5:
            {
                if(ucSegDisFlg)
                {
                    N6_F_ON ;
                }
                else
                {
                    N6_F_OFF ;
                }
                break;
            }
            case 6:
            {
                if(ucSegDisFlg)
                {
                    N6_G_ON ;
                }
                else
                {
                    N6_G_OFF ;
                }
                break;
            }
            case 7:
            {
                if(ucSegDisFlg)
                {
                }
                else
                {
                }
                break;
            }
            default:
                break;
            }

            break;
        }
        case SEG_N7:
        {
            switch(n)
            {
            case 0:
            {
                if(ucSegDisFlg)
                {
                    N7_A_ON ;
                }
                else
                {
                    N7_A_OFF ;
                }
                break;
            }
            case 1:
            {
                if(ucSegDisFlg)
                {
                    N7_B_ON ;
                }
                else
                {
                    N7_B_OFF ;
                }
                break;
            }
            case 2:
            {
                if(ucSegDisFlg)
                {
                    N7_C_ON ;
                }
                else
                {
                    N7_C_OFF ;
                }
                break;
            }
            case 3:
            {
                if(ucSegDisFlg)
                {
                    N7_D_ON ;
                }
                else
                {
                    N7_D_OFF ;
                }
                break;
            }
            case 4:
            {
                if(ucSegDisFlg)
                {
                    N7_E_ON ;
                }
                else
                {
                    N7_E_OFF ;
                }
                break;
            }
            case 5:
            {
                if(ucSegDisFlg)
                {
                    N7_F_ON ;
                }
                else
                {
                    N7_F_OFF ;
                }
                break;
            }
            case 6:
            {
                if(ucSegDisFlg)
                {
                    N7_G_ON ;
                }
                else
                {
                    N7_G_OFF ;
                }
                break;
            }
            case 7:
            {
                if(ucSegDisFlg)
                {
                }
                else
                {
                }
                break;
            }
            default:
                break;
            }

            break;
        }
        case SEG_N8:
        {
            switch(n)
            {
            case 0:
            {
                if(ucSegDisFlg)
                {
                    N8_A_ON ;
                }
                else
                {
                    N8_A_OFF ;
                }
                break;
            }
            case 1:
            {
                if(ucSegDisFlg)
                {
                    N8_B_ON ;
                }
                else
                {
                    N8_B_OFF ;
                }
                break;
            }
            case 2:
            {
                if(ucSegDisFlg)
                {
                    N8_C_ON ;
                }
                else
                {
                    N8_C_OFF ;
                }
                break;
            }
            case 3:
            {
                if(ucSegDisFlg)
                {
                    N8_D_ON ;
                }
                else
                {
                    N8_D_OFF ;
                }
                break;
            }
            case 4:
            {
                if(ucSegDisFlg)
                {
                    N8_E_ON ;
                }
                else
                {
                    N8_E_OFF ;
                }
                break;
            }
            case 5:
            {
                if(ucSegDisFlg)
                {
                    N8_F_ON ;
                }
                else
                {
                    N8_F_OFF ;
                }
                break;
            }
            case 6:
            {
                if(ucSegDisFlg)
                {
                    N8_G_ON ;
                }
                else
                {
                    N8_G_OFF ;
                }
                break;
            }
            case 7:
            {
                if(ucSegDisFlg)
                {
                }
                else
                {
                }
                break;
            }
            default:
                break;
            }

            break;
        }
        case SEG_N9:
        {
            switch(n)
            {
            case 0:
            {
                if(ucSegDisFlg)
                {
                    N9_A_ON ;
                }
                else
                {
                    N9_A_OFF ;
                }
                break;
            }
            case 1:
            {
                if(ucSegDisFlg)
                {
                    N9_B_ON ;
                }
                else
                {
                    N9_B_OFF ;
                }
                break;
            }
            case 2:
            {
                if(ucSegDisFlg)
                {
                    N9_C_ON ;
                }
                else
                {
                    N9_C_OFF ;
                }
                break;
            }
            case 3:
            {
                if(ucSegDisFlg)
                {
                    N9_D_ON ;
                }
                else
                {
                    N9_D_OFF ;
                }
                break;
            }
            case 4:
            {
                if(ucSegDisFlg)
                {
                    N9_E_ON ;
                }
                else
                {
                    N9_E_OFF ;
                }
                break;
            }
            case 5:
            {
                if(ucSegDisFlg)
                {
                    N9_F_ON ;
                }
                else
                {
                    N9_F_OFF ;
                }
                break;
            }
            case 6:
            {
                if(ucSegDisFlg)
                {
                    N9_G_ON ;
                }
                else
                {
                    N9_G_OFF ;
                }
                break;
            }
            case 7:
            {
                if(ucSegDisFlg)
                {
                }
                else
                {
                }
                break;
            }
            default:
                break;
            }

            break;
        }
        case SEG_N10:
        {
            switch(n)
            {
            case 0:
            {
                if(ucSegDisFlg)
                {
                    N10_A_ON ;
                }
                else
                {
                    N10_A_OFF ;
                }
                break;
            }
            case 1:
            {
                if(ucSegDisFlg)
                {
                    N10_B_ON ;
                }
                else
                {
                    N10_B_OFF ;
                }
                break;
            }
            case 2:
            {
                if(ucSegDisFlg)
                {
                    N10_C_ON ;
                }
                else
                {
                    N10_C_OFF ;
                }
                break;
            }
            case 3:
            {
                if(ucSegDisFlg)
                {
                    N10_D_ON ;
                }
                else
                {
                    N10_D_OFF ;
                }
                break;
            }
            case 4:
            {
                if(ucSegDisFlg)
                {
                    N10_E_ON ;
                }
                else
                {
                    N10_E_OFF ;
                }
                break;
            }
            case 5:
            {
                if(ucSegDisFlg)
                {
                    N10_F_ON ;
                }
                else
                {
                    N10_F_OFF ;
                }
                break;
            }
            case 6:
            {
                if(ucSegDisFlg)
                {
                    N10_G_ON ;
                }
                else
                {
                    N10_G_OFF ;
                }
                break;
            }
            case 7:
            {
                if(ucSegDisFlg)
                {
                }
                else
                {
                }
                break;
            }
            default:
                break;
            }

            break;
        }
        case SEG_N11:
        {
            switch(n)
            {
            case 0:
            {
                if(ucSegDisFlg)
                {
                    N11_A_ON ;
                }
                else
                {
                    N11_A_OFF ;
                }
                break;
            }
            case 1:
            {
                if(ucSegDisFlg)
                {
                    N11_B_ON ;
                }
                else
                {
                    N11_B_OFF ;
                }
                break;
            }
            case 2:
            {
                if(ucSegDisFlg)
                {
                    N11_C_ON ;
                }
                else
                {
                    N11_C_OFF ;
                }
                break;
            }
            case 3:
            {
                if(ucSegDisFlg)
                {
                    N11_D_ON ;
                }
                else
                {
                    N11_D_OFF ;
                }
                break;
            }
            case 4:
            {
                if(ucSegDisFlg)
                {
                    N11_E_ON ;
                }
                else
                {
                    N11_E_OFF ;
                }
                break;
            }
            case 5:
            {
                if(ucSegDisFlg)
                {
                    N11_F_ON ;
                }
                else
                {
                    N11_F_OFF ;
                }
                break;
            }
            case 6:
            {
                if(ucSegDisFlg)
                {
                    N11_G_ON ;
                }
                else
                {
                    N11_G_OFF ;
                }
                break;
            }
            case 7:
            {
                if(ucSegDisFlg)
                {
                }
                else
                {
                }
                break;
            }
            default:
                break;
            }

            break;
        }
        case SEG_N12:
        {
            switch(n)
            {
            case 0:
            {
                if(ucSegDisFlg)
                {
                    N12_A_ON ;
                }
                else
                {
                    N12_A_OFF ;
                }
                break;
            }
            case 1:
            {
                if(ucSegDisFlg)
                {
                    N12_B_ON ;
                }
                else
                {
                    N12_B_OFF ;
                }
                break;
            }
            case 2:
            {
                if(ucSegDisFlg)
                {
                    N12_C_ON ;
                }
                else
                {
                    N12_C_OFF ;
                }
                break;
            }
            case 3:
            {
                if(ucSegDisFlg)
                {
                    N12_D_ON ;
                }
                else
                {
                    N12_D_OFF ;
                }
                break;
            }
            case 4:
            {
                if(ucSegDisFlg)
                {
                    N12_E_ON ;
                }
                else
                {
                    N12_E_OFF ;
                }
                break;
            }
            case 5:
            {
                if(ucSegDisFlg)
                {
                    N12_F_ON ;
                }
                else
                {
                    N12_F_OFF ;
                }
                break;
            }
            case 6:
            {
                if(ucSegDisFlg)
                {
                    N12_G_ON ;
                }
                else
                {
                    N12_G_OFF ;
                }
                break;
            }
            case 7:
            {
                if(ucSegDisFlg)
                {
                }
                else
                {
                }
                break;
            }
            default:
                break;
            }

            break;
        }
        case SEG_N13:
        {
            switch(n)
            {
            case 0:
            {
                if(ucSegDisFlg)
                {
                    N13_A_ON ;
                }
                else
                {
                    N13_A_OFF ;
                }
                break;
            }
            case 1:
            {
                if(ucSegDisFlg)
                {
                    N13_B_ON ;
                }
                else
                {
                    N13_B_OFF ;
                }
                break;
            }
            case 2:
            {
                if(ucSegDisFlg)
                {
                    N13_C_ON ;
                }
                else
                {
                    N13_C_OFF ;
                }
                break;
            }
            case 3:
            {
                if(ucSegDisFlg)
                {
                    N13_D_ON ;
                }
                else
                {
                    N13_D_OFF ;
                }
                break;
            }
            case 4:
            {
                if(ucSegDisFlg)
                {
                    N13_E_ON ;
                }
                else
                {
                    N13_E_OFF ;
                }
                break;
            }
            case 5:
            {
                if(ucSegDisFlg)
                {
                    N13_F_ON ;
                }
                else
                {
                    N13_F_OFF ;
                }
                break;
            }
            case 6:
            {
                if(ucSegDisFlg)
                {
                    N13_G_ON ;
                }
                else
                {
                    N13_G_OFF ;
                }
                break;
            }
            case 7:
            {
                if(ucSegDisFlg)
                {
                }
                else
                {
                }
                break;
            }
            default:
                break;
            }

            break;
        }
        case SEG_N14:
        {
            switch(n)
            {
            case 0:
            {
                if(ucSegDisFlg)
                {
                    N14_A_ON ;
                }
                else
                {
                    N14_A_OFF ;
                }
                break;
            }
            case 1:
            {
                if(ucSegDisFlg)
                {
                    N14_B_ON ;
                }
                else
                {
                    N14_B_OFF ;
                }
                break;
            }
            case 2:
            {
                if(ucSegDisFlg)
                {
                    N14_C_ON ;
                }
                else
                {
                    N14_C_OFF ;
                }
                break;
            }
            case 3:
            {
                if(ucSegDisFlg)
                {
                    N14_D_ON ;
                }
                else
                {
                    N14_D_OFF ;
                }
                break;
            }
            case 4:
            {
                if(ucSegDisFlg)
                {
                    N14_E_ON ;
                }
                else
                {
                    N14_E_OFF ;
                }
                break;
            }
            case 5:
            {
                if(ucSegDisFlg)
                {
                    N14_F_ON ;
                }
                else
                {
                    N14_F_OFF ;
                }
                break;
            }
            case 6:
            {
                if(ucSegDisFlg)
                {
                    N14_G_ON ;
                }
                else
                {
                    N14_G_OFF ;
                }
                break;
            }
            case 7:
            {
                if(ucSegDisFlg)
                {
                }
                else
                {
                }
                break;
            }
            default:
                break;
            }

            break;
        }
        case SEG_N15:
        {
            switch(n)
            {
            case 0:
            {
                if(ucSegDisFlg)
                {
                    N15_A_ON ;
                }
                else
                {
                    N15_A_OFF ;
                }
                break;
            }
            case 1:
            {
                if(ucSegDisFlg)
                {
                    N15_B_ON ;
                }
                else
                {
                    N15_B_OFF ;
                }
                break;
            }
            case 2:
            {
                if(ucSegDisFlg)
                {
                    N15_C_ON ;
                }
                else
                {
                    N15_C_OFF ;
                }
                break;
            }
            case 3:
            {
                if(ucSegDisFlg)
                {
                    N15_D_ON ;
                }
                else
                {
                    N15_D_OFF ;
                }
                break;
            }
            case 4:
            {
                if(ucSegDisFlg)
                {
                    N15_E_ON ;
                }
                else
                {
                    N15_E_OFF ;
                }
                break;
            }
            case 5:
            {
                if(ucSegDisFlg)
                {
                    N15_F_ON ;
                }
                else
                {
                    N15_F_OFF ;
                }
                break;
            }
            case 6:
            {
                if(ucSegDisFlg)
                {
                    N15_G_ON ;
                }
                else
                {
                    N15_G_OFF ;
                }
                break;
            }
            case 7:
            {
                if(ucSegDisFlg)
                {
                }
                else
                {
                }
                break;
            }
            default:
                break;
            }

            break;
        }

        default:
            break;
        }
    }
}








/******************************************************************************
** 功  能：LCD清屏
** 参  数：无
** 返回值：无
** 备  注：
******************************************************************************/
void vBsp_LCD_Clear(void)
{
    uint8_t n;

    for(n = 0; n < sizeof(gucLCD_Buffer); n++)
    {
        gucLCD_Buffer[n] = 0;
    }
    //vBsp_LCD_Refresh();
}

/******************************************************************************
** 功  能：LCD全显
** 参  数：无
** 返回值：无
** 备  注：
******************************************************************************/
void vBsp_LCD_DispAll(void)
{
    uint8_t n;

    for(n = 0; n < sizeof(gucLCD_Buffer); n++)
    {
        gucLCD_Buffer[n] = 0xFF;
    }
    //vBsp_LCD_Refresh();
}

/******************************************************************************
** 功  能：显示大灯图标
** 参  数：OnOff-是否显示，0-不显示，1-显示
** 返回值：无
** 备  注：
******************************************************************************/
void vBsp_LCD_DispICO_Lamp(uint8_t OnOff)
{
    if(OnOff)
    {
        ICO_LAMP_ON;
    }
    else
    {
        ICO_LAMP_OFF;
    }
}

/******************************************************************************
** 功  能：显示USB图标
** 参  数：OnOff-是否显示，0-不显示，1-显示
** 返回值：无
** 备  注：
******************************************************************************/
void vBsp_LCD_DispICO_USB(uint8_t OnOff)
{
    if(OnOff)
    {
        ICO_USB_ON;
    }
    else
    {
        ICO_USB_OFF;
    }
}

/******************************************************************************
** 功  能：显示刹车图标
** 参  数：OnOff-是否显示，0-不显示，1-显示
** 返回值：无
** 备  注：
******************************************************************************/
void vBsp_LCD_DispICO_Break(uint8_t OnOff)
{

}

/******************************************************************************
** 功  能：显示服务扳手图标
** 参  数：OnOff-是否显示，0-不显示，1-显示
** 返回值：无
** 备  注：
******************************************************************************/
void vBsp_LCD_DispICO_Service(uint8_t OnOff)
{
    if(OnOff)
    {
        ICO_WRENCH_ON;
    }
    else
    {
        ICO_WRENCH_OFF;
    }
}

/******************************************************************************
** 功  能：显示蓝牙图标
** 参  数：OnOff-是否显示，0-不显示，1-显示
** 返回值：无
** 备  注：
******************************************************************************/
void vBsp_LCD_DispICO_Bluetooth(uint8_t OnOff)
{
    if(OnOff)
    {
        ICO_BLE_ON;
    }
    else
    {
        ICO_BLE_OFF;
    }
}

/******************************************************************************
** 功  能：显示km/h图标
** 参  数：OnOff-是否显示，0-不显示，1-显示
** 返回值：无
** 备  注：
******************************************************************************/
void vBsp_LCD_DispICO_KPH(uint8_t OnOff)
{
    if(OnOff)
    {
        ICO_KMH_ON;
    }
    else
    {
        ICO_KMH_OFF;
    }
}

/******************************************************************************
** 功  能：显示MPH图标
** 参  数：OnOff-是否显示，0-不显示，1-显示
** 返回值：无
** 备  注：
******************************************************************************/
void vBsp_LCD_DispICO_MPH(uint8_t OnOff)
{
    if(OnOff)
    {
        ICO_MPH_ON;
    }
    else
    {
        ICO_MPH_OFF;
    }
}

/******************************************************************************
** 功  能：显示MAX图标
** 参  数：OnOff-是否显示，0-不显示，1-显示
** 返回值：无
** 备  注：
******************************************************************************/
void vBsp_LCD_DispICO_Max(uint8_t OnOff)
{
    if(OnOff)
    {
        ICO_MAX_ON;
    }
    else
    {
        ICO_MAX_OFF;
    }
}

/******************************************************************************
** 功  能：显示AVG图标
** 参  数：OnOff-是否显示，0-不显示，1-显示
** 返回值：无
** 备  注：
******************************************************************************/
void vBsp_LCD_DispICO_Avg(uint8_t OnOff)
{
    if(OnOff)
    {
        ICO_AVG_ON;
    }
    else
    {
        ICO_AVG_OFF;
    }
}

/******************************************************************************
** 功  能：显示ECO图标
** 参  数：OnOff-是否显示，0-不显示，1-显示
** 返回值：无
** 备  注：
******************************************************************************/
void vBsp_LCD_DispICO_Eco(uint8_t OnOff)
{

}

/******************************************************************************
** 功  能：显示NORMAL图标
** 参  数：OnOff-是否显示，0-不显示，1-显示
** 返回值：无
** 备  注：
******************************************************************************/
void vBsp_LCD_DispICO_Normal(uint8_t OnOff)
{

}

/******************************************************************************
** 功  能：显示SPORT图标
** 参  数：OnOff-是否显示，0-不显示，1-显示
** 返回值：无
** 备  注：
******************************************************************************/
void vBsp_LCD_DispICO_Sport(uint8_t OnOff)
{

}

/******************************************************************************
** 功  能：显示TRIP图标
** 参  数：OnOff-是否显示，0-不显示，1-显示
** 返回值：无
** 备  注：
******************************************************************************/
void vBsp_LCD_DispICO_Trip(uint8_t OnOff)
{
    if(OnOff)
    {
        ICO_TRIP_ON;
    }
    else
    {
        ICO_TRIP_OFF;
    }
}

/******************************************************************************
** 功  能：显示ODO图标
** 参  数：OnOff-是否显示，0-不显示，1-显示
** 返回值：无
** 备  注：
******************************************************************************/
void vBsp_LCD_DispICO_ODO(uint8_t OnOff)
{
    if(OnOff)
    {
        ICO_ODO_ON;
    }
    else
    {
        ICO_ODO_OFF;
    }
}

/******************************************************************************
** 功  能：显示TIME图标
** 参  数：OnOff-是否显示，0-不显示，1-显示
** 返回值：无
** 备  注：
******************************************************************************/
void vBsp_LCD_DispICO_Time(uint8_t OnOff)
{
    if(OnOff)
    {
        ICO_TIME_ON;
    }
    else
    {
        ICO_TIME_OFF;
    }
}

/******************************************************************************
** 功  能：显示POWER图标,功率的power
** 参  数：OnOff-是否显示，0-不显示，1-显示
** 返回值：无
** 备  注：
******************************************************************************/
void vBsp_LCD_DispICO_Power(uint8_t OnOff)
{
    if(OnOff)
    {
        ICO_POWER_ON;
    }
    else
    {
        ICO_POWER_OFF;
    }
}

/******************************************************************************
** 功  能：显示MENU图标
** 参  数：OnOff-是否显示，0-不显示，1-显示
** 返回值：无
** 备  注：
******************************************************************************/
void vBsp_LCD_DispICO_Menu(uint8_t OnOff)
{

}

/******************************************************************************
** 功  能：显示单位W图标
** 参  数：OnOff-是否显示，0-不显示，1-显示
** 返回值：无
** 备  注：
******************************************************************************/
void vBsp_LCD_DispICO_Unit_W(uint8_t OnOff)
{
    if(OnOff)
    {
        ICO_W_ON;
    }
    else
    {
        ICO_W_OFF;
    }
}

/******************************************************************************
** 功  能：显示单位min图标
** 参  数：OnOff-是否显示，0-不显示，1-显示
** 返回值：无
** 备  注：
******************************************************************************/
void vBsp_LCD_DispICO_Unit_Min(uint8_t OnOff)
{
    if(OnOff)
    {
        ICO_MIN_ON;
    }
    else
    {
        ICO_MIN_OFF;
    }
}

/******************************************************************************
** 功  能：显示单位mile图标
** 参  数：OnOff-是否显示，0-不显示，1-显示
** 返回值：无
** 备  注：
******************************************************************************/
void vBsp_LCD_DispICO_Unit_Mile(uint8_t OnOff)
{
    if(OnOff)
    {
        ICO_MILE_ON;
    }
    else
    {
        ICO_MILE_OFF;
    }
}

/******************************************************************************
** 功  能：显示单位km图标
** 参  数：OnOff-是否显示，0-不显示，1-显示
** 返回值：无
** 备  注：
******************************************************************************/
void vBsp_LCD_DispICO_Unit_Km(uint8_t OnOff)
{
    if(OnOff)
    {
        ICO_KM_ON;
    }
    else
    {
        ICO_KM_OFF;
    }
}

/******************************************************************************
** 功  能：显示挡位区和参数区的横线
** 参  数：OnOff-是否显示，0-不显示，1-显示
** 返回值：无
** 备  注：
******************************************************************************/
void vBsp_LCD_DispICO_Line(uint8_t OnOff)
{
    if(OnOff)
    {
        ICO_LINE_BOT_ON;
    }
    else
    {
        ICO_LINE_BOT_OFF;
    }
}

/******************************************************************************
** 功  能：显示速度值
** 参  数：Speed-速度值，精度0.1km/h，OnOff-是否显示，0-不显示，1-显示
** 返回值：无
** 备  注：
******************************************************************************/
void vBsp_LCD_DispSpeedNum(uint16_t Speed,uint8_t OnOff)
{
    uint8_t lucG,lucS,lucB;     /*个位、十位、百位上的数字*/


    /*防止超量程显示错误*/
    if(Speed > 999)
    {
        Speed = 999;
    }

    lucB = Speed / 100;
    lucS = Speed % 100 / 10;
    lucG = Speed % 10;

    /*写百位*/
    if(OnOff)
    {
        vBsp_LCD_WriteSegment(gusSegTab_13[lucB],SEG_N2,13);
    }
    else
    {
        vBsp_LCD_WriteSegment(0x0000,SEG_N2,13);
    }

    /*写十位*/
    if(OnOff)
    {
        vBsp_LCD_WriteSegment(gusSegTab_13[lucS],SEG_N3,13);
    }
    else
    {
        vBsp_LCD_WriteSegment(0x0000,SEG_N3,13);
    }

    /*写个位*/
    if(OnOff)
    {

        vBsp_LCD_WriteSegment(gusSegTab_13[lucG],SEG_N4,13);
    }
    else
    {
        vBsp_LCD_WriteSegment(0x0000,SEG_N4,13);
    }
}

/******************************************************************************
** 功  能：显示挡位上面的横线
** 参  数：Pas-挡位值，-1表示助推档，OnOff-是否显示，0-不显示，1-显示
** 返回值：无
** 备  注：
******************************************************************************/
void vBsp_LCD_DispPasLine(int8_t Pas,uint8_t OnOff)
{

    ICO_GEAR_CIRCLE_ON;

    HAL_TIM_Base_Stop_IT(&htim17);/*防止代码运行到一半时刷新*/
    ICO_GEAR1_FRAME_OFF;
    ICO_GEAR2_FRAME_OFF;
    ICO_GEAR3_FRAME_OFF;
    ICO_GEAR4_FRAME_OFF;
    ICO_GEAR5_FRAME_OFF;

    switch(Pas)
    {
    case -1:
    {
        if(OnOff)
        {
            /*助推档横线*/
            //ICO_PUSH_FRAME_ON;
        }
        else
        {
            //ICO_PUSH_FRAME_OFF;
        }
        break;
    }
    case 0:
    {
        if(OnOff)
        {

        }
        else
        {

        }

        break;
    }
    case 1:
    {
        if(OnOff)
        {
            ICO_GEAR1_FRAME_ON;   /*0档横线*/
        }
        else
        {
            ICO_GEAR1_FRAME_OFF;
        }
        break;
    }
    case 2:
    {
        if(OnOff)
        {
            ICO_GEAR1_FRAME_ON;
            ICO_GEAR2_FRAME_ON;
        }
        else
        {
            ICO_GEAR2_FRAME_OFF;
        }
        break;
    }
    case 3:
    {
        if(OnOff)
        {
            ICO_GEAR1_FRAME_ON;
            ICO_GEAR2_FRAME_ON;
            ICO_GEAR3_FRAME_ON;
        }
        else
        {
            ICO_GEAR3_FRAME_OFF;
        }
        break;
    }
    case 4:
    {
        if(OnOff)
        {
            ICO_GEAR1_FRAME_ON;
            ICO_GEAR2_FRAME_ON;
            ICO_GEAR3_FRAME_ON;
            ICO_GEAR4_FRAME_ON;   /*0档横线*/
        }
        else
        {
            ICO_GEAR4_FRAME_OFF;
        }
        break;
    }
    case 5:
    {
        if(OnOff)
        {
            ICO_GEAR1_FRAME_ON;
            ICO_GEAR2_FRAME_ON;
            ICO_GEAR3_FRAME_ON;
            ICO_GEAR4_FRAME_ON;
            ICO_GEAR5_FRAME_ON;   /*0档横线*/
        }
        else
        {
            ICO_GEAR5_FRAME_OFF;
        }
        break;
    }
    }

    HAL_TIM_Base_Start_IT(&htim17);/*防止代码运行到一半时刷新*/
}
/******************************************************************************
** 功  能：显示挡位
** 参  数：Pas-挡位值，-1表示助推档，OnOff-是否显示，0-不显示，1-显示
** 返回值：无
** 备  注：本函数显示小于等于该挡位的所有挡位。比如5档，0-4档图标也会显示。
******************************************************************************/
void vBsp_LCD_DispPas(int8_t Pas,uint8_t OnOff)
{
    /*如果不显示，把所有挡位清零*/
    if(OnOff == 0)
    {


        ICO_PUSH_OFF;
    }
    else
    {
        if(Pas >= 0)
        {
            vBsp_LCD_WriteSegment(gucSegTab_7[Pas],SEG_N1,7);
        }
    }
}


/******************************************************************************
** 功  能：在速度显示区显示字符
** 参  数：pString-要显示的字符串，OnOff-是否显示，0-不显示，1-显示
** 返回值：无
** 备  注：字符K、M，V、W、X、Z不支持显示。
******************************************************************************/
void vBsp_LCD_DispStringAtSpeed(char *pString,uint8_t OnOff)
{
    uint8_t lucIndex = 0;
    uint8_t lucDigitalIndex;
    enSEG_Nx_TYPE N_x;


    while(*(pString) != '\0' && lucIndex < 3)
    {
        /*字符的0-9*/
        if((*(pString) >= '0') && (*(pString) <= '9'))
        {
            lucDigitalIndex = *(pString) - '0';
        }
        /*小写字母a-z*/
        else if((*(pString) >= 'a') && (*(pString) <= 'z'))
        {
            lucDigitalIndex = *(pString) - 'a' + 11; /*段码数组下标为11的数是字母A的字模*/
        }
        /*大写字母A-Z*/
        else if(*pString >= 'A' && *pString <= 'Z')
        {
            lucDigitalIndex = *pString - 'A' + 11;
        }
        /*减号*/
        else if(*pString == '-')
        {
            lucDigitalIndex = 37;   /*37是减号“-”的索引值*/
        }
        /*其它字符以及空格，都显示空格*/
        else
        {
            lucDigitalIndex = 10; /*段码数组下标为10的是空格*/
        }
        switch(lucIndex)
        {
        case 0:
        {
            N_x = SEG_N1;
            break;
        }
        case 1:
        {
            N_x = SEG_N2;
            break;
        }
        case 2:
        {
            N_x = SEG_N3;
            break;
        }
        }
        if(OnOff)
        {
            vBsp_LCD_WriteSegment(gusSegTab_13[lucDigitalIndex],N_x,13);
        }
        else
        {
            vBsp_LCD_WriteSegment(0x0000,N_x,13);
        }
        lucIndex++;
        pString++;
    }
}

/******************************************************************************
** 功  能：显示电量百分比数字
** 参  数：Soc-电量，OnOff-是否显示，0-不显示，1-显示
** 返回值：无
** 备  注：
******************************************************************************/
void vBsp_LCD_DispSocNum(uint8_t Soc,uint8_t OnOff)
{
    if(Soc > 100)
    {
        Soc = 100;
    }

    if(Soc == 100)
    {

    }
    else
    {

    }
}
/******************************************************************************
** 功  能：显示电量条
** 参  数：BatLevel-电量等级，0-5，OnOff-是否显示，0-不显示，1-显示
** 返回值：无
** 备  注：
******************************************************************************/
void vBsp_LCD_DispBatteryBar(uint8_t BatLevel,uint8_t OnOff)
{
    if(OnOff == 0)
    {
        ICO_BAT_FRAME_OFF;  /*外框*/
        ICO_BAT_LEV1_OFF;  /*1格*/
        ICO_BAT_LEV2_OFF;  /*2格*/
        ICO_BAT_LEV3_OFF;  /*3格*/
        ICO_BAT_LEV4_OFF;  /*4格*/
        ICO_BAT_LEV5_OFF;  /*5格*/
    }
    else
    {
        switch(BatLevel)
        {
        case 0:
        {
            ICO_BAT_FRAME_ON;  /*外框*/
            ICO_BAT_LEV1_OFF;  /*1格*/
            ICO_BAT_LEV2_OFF;  /*2格*/
            ICO_BAT_LEV3_OFF;  /*3格*/
            ICO_BAT_LEV4_OFF;  /*4格*/
            ICO_BAT_LEV5_OFF;  /*5格*/
            break;
        }
        case 1:
        {
            ICO_BAT_FRAME_ON;  /*外框*/
            ICO_BAT_LEV1_ON;  /*1格*/
            ICO_BAT_LEV2_OFF;  /*2格*/
            ICO_BAT_LEV3_OFF;  /*3格*/
            ICO_BAT_LEV4_OFF;  /*4格*/
            ICO_BAT_LEV5_OFF;  /*5格*/
            break;
        }
        case 2:
        {
            ICO_BAT_FRAME_ON;  /*外框*/
            ICO_BAT_LEV1_ON;  /*1格*/
            ICO_BAT_LEV2_ON;  /*2格*/
            ICO_BAT_LEV3_OFF;  /*3格*/
            ICO_BAT_LEV4_OFF;  /*4格*/
            ICO_BAT_LEV5_OFF;  /*5格*/
            break;
        }
        case 3:
        {
            ICO_BAT_FRAME_ON;  /*外框*/
            ICO_BAT_LEV1_ON;  /*1格*/
            ICO_BAT_LEV2_ON;  /*2格*/
            ICO_BAT_LEV3_ON;  /*3格*/
            ICO_BAT_LEV4_OFF;  /*4格*/
            ICO_BAT_LEV5_OFF;  /*5格*/
            break;
        }
        case 4:
        {
            ICO_BAT_FRAME_ON;  /*外框*/
            ICO_BAT_LEV1_ON;  /*1格*/
            ICO_BAT_LEV2_ON;  /*2格*/
            ICO_BAT_LEV3_ON;  /*3格*/
            ICO_BAT_LEV4_ON;  /*4格*/
            ICO_BAT_LEV5_OFF;  /*5格*/
            break;
        }
        case 5:
        {
            ICO_BAT_FRAME_ON;  /*外框*/
            ICO_BAT_LEV1_ON;  /*1格*/
            ICO_BAT_LEV2_ON;  /*2格*/
            ICO_BAT_LEV3_ON;  /*3格*/
            ICO_BAT_LEV4_ON;  /*4格*/
            ICO_BAT_LEV5_ON;  /*5格*/
            break;
        }
        default:
            break;
        }
    }
}

/******************************************************************************
** 功  能：显示电池电量（百分比数字和电池图标）
** 参  数：Value-电量数值 0-100，Level5-5格对应的电量，Level4-4格对应的电量，Level3-3格对应的电量，Leve2-2格对应的电量，Level1-1格对应的电量
** 返回值：无
******************************************************************************/
void vLCD_DispSoc(uint8_t Value,uint8_t Level5,uint8_t Level4,uint8_t Level3,uint8_t Level2,uint8_t Level1)
{
    vBsp_LCD_DispSocNum(Value,ON);    /*电量数值始终显示*/
    if(Value >= Level5)
    {
        vBsp_LCD_DispBatteryBar(5,ON);
    }
    else if(Value >= Level4)
    {
        vBsp_LCD_DispBatteryBar(4,ON);
    }
    else if(Value >= Level3)
    {
        vBsp_LCD_DispBatteryBar(3,ON);
    }
    else if(Value >= Level2)
    {
        vBsp_LCD_DispBatteryBar(2,ON);
    }
    else if(Value >= Level1)
    {
        vBsp_LCD_DispBatteryBar(1,ON);
    }
    else
    {
        vBsp_LCD_DispBatteryBar(0,ucBsp_GetFlashFlag());  /*电量低于1格时，电量外框闪烁*/
    }
}



/******************************************************************************
** 功  能：在底部数值显示区，显示数值
** 参  数：Data-要显示的数字，Scale-比例系数，1或者10，10表示带小数点显示，OnOff-是否显示，0-不显示，1-显示
** 返回值：无
** 备  注：不带前导0显示
******************************************************************************/
void vBsp_LCD_DispNumber(uint32_t Data,uint8_t Scale,uint8_t OnOff)
{
    uint8_t lucBitNum[6];


    if(OnOff)
    {
        if(Data < 10)   /*一位数字*/
        {
            if(Scale == 1)
            {
                lucBitNum[5] = lucBitNum[4] = lucBitNum[3] = lucBitNum[2] = lucBitNum[1] = 10;  /*10是空格的索引值*/
                lucBitNum[0] = Data;
            }
            else
            {
                lucBitNum[5] = lucBitNum[4] = lucBitNum[3] = lucBitNum[2] = 10;
                lucBitNum[1] = 0;       /*小数点前的0，显示0*/
                lucBitNum[0] = Data;
            }
        }
        else if(Data < 100) /*2位数字*/
        {
            lucBitNum[5] = lucBitNum[4] = lucBitNum[3] = lucBitNum[2] = 10;
            lucBitNum[1] = Data / 10;
            lucBitNum[0] = Data % 10;
        }
        else if(Data < 1000)    /*3位数字*/
        {
            lucBitNum[5] = lucBitNum[4] = lucBitNum[3] = 10;
            lucBitNum[2] = Data / 100;
            lucBitNum[1] = Data % 100 / 10;
            lucBitNum[0] = Data % 10;
        }
        else if(Data < 10000)   /*4位数字*/
        {
            lucBitNum[5] = lucBitNum[4] = 10;
            lucBitNum[3] = Data / 1000;
            lucBitNum[2] = Data % 1000 / 100;
            lucBitNum[1] = Data % 100 / 10;
            lucBitNum[0] = Data % 10;
        }
        else if(Data < 100000)   /*5位数字*/
        {
            lucBitNum[5] = 10;
            lucBitNum[4] = Data / 10000;
            lucBitNum[3] = Data % 10000 / 1000;
            lucBitNum[2] = Data % 1000 / 100;
            lucBitNum[1] = Data % 100 / 10;
            lucBitNum[0] = Data % 10;
        }
        else    /*6位数字*/
        {
            lucBitNum[5] = Data / 100000;
            lucBitNum[4] = Data % 100000 / 10000;
            lucBitNum[3] = Data % 10000 / 1000;
            lucBitNum[2] = Data % 1000 / 100;
            lucBitNum[1] = Data % 100 / 10;
            lucBitNum[0] = Data % 10;
        }

        vBsp_LCD_WriteSegment(gucSegTab_7[lucBitNum[5]],SEG_N5,7);      /*左起第1位*/
        vBsp_LCD_WriteSegment(gucSegTab_7[lucBitNum[4]],SEG_N6,7);      /*左起第2位*/
        vBsp_LCD_WriteSegment(gucSegTab_7[lucBitNum[3]],SEG_N7,7);      /*左起第3位*/
        vBsp_LCD_WriteSegment(gucSegTab_7[lucBitNum[2]],SEG_N8,7);      /*左起第4位*/
        vBsp_LCD_WriteSegment(gucSegTab_7[lucBitNum[1]],SEG_N9,7);      /*左起第5位*/
        vBsp_LCD_WriteSegment(gucSegTab_7[lucBitNum[0]],SEG_N10,7);      /*左起第6位*/

        if(Scale == 1)
        {
            ICO_POINT_OFF;   /*不显示小数点*/
        }
        else
        {
            ICO_POINT_ON;   /*显示小数点*/
        }
    }
    else
    {
        vBsp_LCD_WriteSegment(0x00,SEG_N5,7);      /*左起第1位*/
        vBsp_LCD_WriteSegment(0x00,SEG_N6,7);      /*左起第2位*/
        vBsp_LCD_WriteSegment(0x00,SEG_N7,7);      /*左起第3位*/
        vBsp_LCD_WriteSegment(0x00,SEG_N8,7);      /*左起第4位*/
        vBsp_LCD_WriteSegment(0x00,SEG_N9,7);      /*左起第5位*/
        vBsp_LCD_WriteSegment(0x00,SEG_N10,7);     /*左起第6位*/
        ICO_POINT_OFF;   /*不显示小数点*/
    }
}


/******************************************************************************
** 功  能：在底部ODO显示区显示字符
** 参  数：pString-要显示的字符串，lucIndex-从第几个字符开始显示，OnOff-是否显示，0-不显示，1-显示
** 返回值：无
** 备  注：字符K、M，V、W、X、Z不支持显示。
******************************************************************************/
void vBsp_LCD_DispStringAtBottom(char *pString,uint8_t lucIndex,uint8_t OnOff)
{
    uint8_t lucDigitalIndex;
    enSEG_Nx_TYPE N_x;
    ICO_POINT_OFF;   /*不显示小数点*/

    while(*(pString) != '\0' && lucIndex < 6)
    {
        /*字符的0-9*/
        if((*(pString) >= '0') && (*(pString) <= '9'))
        {
            lucDigitalIndex = *(pString) - '0';
        }
        /*小写字母a-z*/
        else if((*(pString) >= 'a') && (*(pString) <= 'z'))
        {
            lucDigitalIndex = *(pString) - 'a' + 38; /*段码数组下标为11的数是字母A的字模*/
        }
        /*大写字母A-Z*/
        else if(*pString >= 'A' && *pString <= 'Z')
        {
            lucDigitalIndex = *pString - 'A' + 11;
        }
        /*减号*/
        else if(*pString == '-')
        {
            lucDigitalIndex = 37;   /*37是减号“-”的索引值*/
        }
        /*其它字符以及空格，都显示空格*/
        else
        {
            lucDigitalIndex = 10; /*段码数组下标为10的是空格*/
        }
        switch(lucIndex)
        {
        case 0:
        {
            N_x = SEG_N5;
            break;
        }
        case 1:
        {
            N_x = SEG_N6;
            break;
        }
        case 2:
        {
            N_x = SEG_N7;
            break;
        }
        case 3:
        {
            N_x = SEG_N8;
            break;
        }
        case 4:
        {
            N_x = SEG_N9;
            break;
        }
        case 5:
        {
            N_x = SEG_N10;
            break;
        }
        default:
            break;
        }
        if(OnOff)
        {
            vBsp_LCD_WriteSegment(gucSegTab_7[lucDigitalIndex],N_x,7);
        }
        else
        {
            vBsp_LCD_WriteSegment(0x00,N_x,7);
        }
        lucIndex++;
        pString++;
    }
}
/******************************************************************************
** 功  能：显示ODO
** 参  数：ODO-里程，精度1km，Unit-单位，0-公制，1-英制。OnOff-是否显示，0-不显示，1-显示
** 返回值：无
** 备  注：
******************************************************************************/
void vBsp_LCD_DispOdo(uint32_t Odo,uint8_t Unit,uint8_t OnOff)
{
    vBsp_LCD_DispICO_ODO(OnOff);        /*ODO标志*/
    vBsp_LCD_DispICO_Trip(0);        /*Trip*/
    vBsp_LCD_DispICO_Power(0);        /*Power*/
    vBsp_LCD_DispICO_Time(0);        /*Time*/
    vBsp_LCD_DispICO_Menu(0);        /*MENU*/
    vBsp_LCD_DispICO_Unit_W(0);        /*W*/
    vBsp_LCD_DispICO_Unit_Min(0);        /*Min*/
    if(Unit == 0)
    {
        vBsp_LCD_DispNumber(Odo,1,OnOff);
        vBsp_LCD_DispICO_Unit_Km(OnOff);        /*km*/
        vBsp_LCD_DispICO_Unit_Mile(0);        /*Mile*/
    }
    else
    {
        vBsp_LCD_DispNumber(Odo * 6214UL / 10000UL,1,OnOff);
        vBsp_LCD_DispICO_Unit_Km(0);        /*km*/
        vBsp_LCD_DispICO_Unit_Mile(OnOff);        /*Mile*/
    }
}

/******************************************************************************
** 功  能：显示Trip数值
** 参  数：Trip-里程，精度0.1km，Unit-单位，0-公制，1-英制。OnOff-是否显示，0-不显示，1-显示
** 返回值：无
** 备  注：
******************************************************************************/
void vBsp_LCD_DispTrip(uint32_t Trip,uint8_t Unit,uint8_t OnOff)
{
    vBsp_LCD_DispICO_ODO(0);        /*ODO标志*/
    vBsp_LCD_DispICO_Trip(OnOff);        /*Trip*/
    vBsp_LCD_DispICO_Power(0);        /*Power*/
    vBsp_LCD_DispICO_Time(0);        /*Time*/
    vBsp_LCD_DispICO_Menu(0);        /*MENU*/
    vBsp_LCD_DispICO_Unit_W(0);        /*W*/
    vBsp_LCD_DispICO_Unit_Min(0);        /*Min*/
    if(Unit == 0)
    {
        vBsp_LCD_DispNumber(Trip,10,OnOff);
        vBsp_LCD_DispICO_Unit_Km(OnOff);        /*km*/
        vBsp_LCD_DispICO_Unit_Mile(0);        /*Mile*/
    }
    else
    {
        vBsp_LCD_DispNumber(Trip * 6214UL / 10000UL,10,OnOff);
        vBsp_LCD_DispICO_Unit_Km(0);        /*km*/
        vBsp_LCD_DispICO_Unit_Mile(OnOff);        /*Mile*/
    }
}

/******************************************************************************
** 功  能：显示速读
** 参  数：Speed-速度，精度0.1km/h，Unit-单位，0-公制，1-英制，OnOff-是否显示，0-不显示，1-显示
** 返回值：无
** 备  注：
******************************************************************************/
void vBsp_LCD_DispSpeed(uint16_t Speed,uint8_t Unit,uint8_t OnOff)
{
    vBsp_LCD_DispICO_Max(0);
    vBsp_LCD_DispICO_Avg(0);

    if(Unit == 0)
    {
        vBsp_LCD_DispSpeedNum(Speed,OnOff);
        vBsp_LCD_DispICO_KPH(OnOff);
        vBsp_LCD_DispICO_MPH(0);
        vBsp_LCD_DispSpeedCircle(Speed/10,1);
    }
    else
    {
        vBsp_LCD_DispSpeedNum(Speed * 6214UL / 10000UL,OnOff);
        vBsp_LCD_DispICO_KPH(0);
        vBsp_LCD_DispICO_MPH(OnOff);
    }
}

/******************************************************************************
** 功  能：显示最高速
** 参  数：MaxSpeed-最高速度，精度0.1km/h，Unit-单位，0-公制，1-英制，OnOff-是否显示，0-不显示，1-显示
** 返回值：无
** 备  注：
******************************************************************************/
void vBsp_LCD_DispMaxSpeed(uint16_t MaxSpeed,uint8_t Unit,uint8_t OnOff)
{
    vBsp_LCD_DispICO_Max(OnOff);
    vBsp_LCD_DispICO_Avg(0);

    if(Unit == 0)
    {
        vBsp_LCD_DispSpeedNum(MaxSpeed,OnOff);
        vBsp_LCD_DispICO_KPH(OnOff);
        vBsp_LCD_DispICO_MPH(0);
    }
    else
    {
        vBsp_LCD_DispSpeedNum(MaxSpeed * 6214UL / 10000UL,OnOff);
        vBsp_LCD_DispICO_KPH(0);
        vBsp_LCD_DispICO_MPH(OnOff);
    }
}

/******************************************************************************
** 功  能：显示平均速
** 参  数：AvgSpeed-最高速度，精度0.1km/h，Unit-单位，0-公制，1-英制，OnOff-是否显示，0-不显示，1-显示
** 返回值：无
** 备  注：
******************************************************************************/
void vBsp_LCD_DispAvgSpeed(uint16_t AvgSpeed,uint8_t Unit,uint8_t OnOff)
{
    vBsp_LCD_DispICO_Max(0);
    vBsp_LCD_DispICO_Avg(OnOff);

    if(Unit == 0)
    {
        vBsp_LCD_DispSpeedNum(AvgSpeed,OnOff);
        vBsp_LCD_DispICO_KPH(OnOff);
        vBsp_LCD_DispICO_MPH(0);
    }
    else
    {
        vBsp_LCD_DispSpeedNum(AvgSpeed * 6214UL / 10000UL,OnOff);
        vBsp_LCD_DispICO_KPH(0);
        vBsp_LCD_DispICO_MPH(OnOff);
    }
}

/******************************************************************************
** 功  能：显示功率
** 参  数：Power-功率，精度1W，OnOff-是否显示，0-不显示，1-显示
** 返回值：无
** 备  注：
******************************************************************************/
void vBsp_LCD_DispPower(uint16_t Power,uint8_t OnOff)
{
    vBsp_LCD_DispNumber(Power,1,OnOff);
    vBsp_LCD_DispICO_Unit_W(OnOff);
    vBsp_LCD_DispICO_Power(OnOff);

    vBsp_LCD_DispICO_ODO(0);
    vBsp_LCD_DispICO_Trip(0);
    vBsp_LCD_DispICO_Time(0);        /*Time*/
    vBsp_LCD_DispICO_Menu(0);        /*MENU*/
    vBsp_LCD_DispICO_Unit_Km(0);     /*km*/
    vBsp_LCD_DispICO_Unit_Mile(0);   /*mile*/
    vBsp_LCD_DispICO_Unit_Min(0);    /*Min*/
}


/******************************************************************************
** 功  能：显示骑行时间
** 参  数：Time-骑行时间，精度1min，OnOff-是否显示，0-不显示，1-显示
** 返回值：无
** 备  注：
******************************************************************************/
void vBsp_LCD_DispTime(uint32_t Time,uint8_t OnOff)
{
    vBsp_LCD_DispNumber(Time,1,OnOff);
    vBsp_LCD_DispICO_Unit_Min(OnOff);
    vBsp_LCD_DispICO_Time(OnOff);

    vBsp_LCD_DispICO_ODO(0);
    vBsp_LCD_DispICO_Trip(0);
    vBsp_LCD_DispICO_Power(0);        /*Power*/
    vBsp_LCD_DispICO_Menu(0);         /*MENU*/
    vBsp_LCD_DispICO_Unit_Km(0);      /*km*/
    vBsp_LCD_DispICO_Unit_Mile(0);    /*mile*/
    vBsp_LCD_DispICO_Unit_W(0);       /*W*/
}

/******************************************************************************
** 功  能：显示错误代码
** 参  数：Error-错误代码
** 返回值：无
** 备  注：
******************************************************************************/
void vBsp_LCD_DispErrorCode(uint8_t Error)
{
    char lucText[7] = {0};
    /*底部区域所有的图标都不显示*/
    vBsp_LCD_DispICO_ODO(0);
    vBsp_LCD_DispICO_Trip(0);
    vBsp_LCD_DispICO_Time(0);
    vBsp_LCD_DispICO_Power(0);
    vBsp_LCD_DispICO_Menu(0);
    vBsp_LCD_DispICO_Unit_Km(0);
    vBsp_LCD_DispICO_Unit_Mile(0);
    vBsp_LCD_DispICO_Unit_Min(0);
    vBsp_LCD_DispICO_Unit_W(0);


    vBsp_LCD_DispICO_Service(1);                /*扳手图标显示*/
    vBsp_LCD_DispStringAtBottom("Err ",0,1);    /*Err字符在最左侧显示，始终显示*/
    sprintf(lucText,"%02X",Error);
    vBsp_LCD_DispStringAtBottom(lucText,4,ucBsp_GetFlashFlag());    /*报错代码闪烁*/
}

/******************************************************************************
** 功  能：显示清Trip界面
** 参  数：State-是否清Trip，0-不清，1-清Trip
** 返回值：无
** 备  注：
******************************************************************************/
void vBsp_LCD_DispSetClearTrip(uint8_t State)
{
    vBsp_LCD_DispStringAtBottom("TC-",0,ON);     /*左侧顶格，显示TC-，*/
    if(State)
    {
        vBsp_LCD_DispStringAtBottom("Y",3,ucBsp_GetFlashFlag());    /*闪烁显示Y或者N*/
    }
    else
    {
        vBsp_LCD_DispStringAtBottom("n",3,ucBsp_GetFlashFlag());
    }
    /*这个函数会和设置单位的函数交叉调用，这个函数里面需要关闭这两个单位的显示*/
    vBsp_LCD_DispICO_MPH(OFF);
    vBsp_LCD_DispICO_KPH(OFF);
}

/******************************************************************************
** 功  能：显示设置背光界面
** 参  数：Backlight-背光等级。0-5
** 返回值：无
** 备  注：
******************************************************************************/
void vBsp_LCD_DispSetBacklight(uint8_t Backlight)
{
    char lucText[7];
    /*防止超量程显示错误*/
    if(Backlight > 9)
    {
        Backlight = 9;
    }
    vBsp_LCD_DispStringAtBottom("BL-",0,ON);     /*左侧顶格，显示BL-，*/
    sprintf(lucText,"%d",Backlight);
    vBsp_LCD_DispStringAtBottom(lucText,3,ucBsp_GetFlashFlag());    /*闪烁显示背光亮度值*/

    /*这个函数会和设置单位的函数交叉调用，这个函数里面需要关闭这两个单位的显示*/
    vBsp_LCD_DispICO_MPH(OFF);
    vBsp_LCD_DispICO_KPH(OFF);
}

/******************************************************************************
** 功  能：显示设置单位类型界面
** 参  数：Unit-单位类型，0-公制，1-英制
** 返回值：无
** 备  注：
******************************************************************************/
void vBsp_LCD_DispSetUnit(uint8_t Unit)
{
    char lucText[7];

    vBsp_LCD_DispStringAtBottom("U-",0,ON);     /*左侧顶格，显示BL-，*/
    sprintf(lucText,"%d ",2 - Unit);             /*公制显示1，英制显示2*/
    vBsp_LCD_DispStringAtBottom(lucText,2,ucBsp_GetFlashFlag());    /*闪烁显示背光亮度值*/
    if(Unit)
    {
        vBsp_LCD_DispICO_MPH(ON);
        vBsp_LCD_DispICO_KPH(OFF);
    }
    else
    {
        vBsp_LCD_DispICO_MPH(OFF);
        vBsp_LCD_DispICO_KPH(ON);
    }

}
/******************************************************************************
** 功  能：显示设置加速模式
** 参  数：ucDriveMode-驱动模式。0-双驱，1-前驱，2-后驱
** 返回值：无
** 备  注：
******************************************************************************/
void vBsp_LCD_DispSetAccelerateMode(uint8_t ucAccelerateMode)
{
    char lucText[7];
    /*防止超量程显示错误*/
    if(ucAccelerateMode > 1)
    {
        ucAccelerateMode = 1;
    }
    vBsp_LCD_DispStringAtBottom("AC-",0,ON);     /*左侧顶格，显示，*/
    sprintf(lucText,"%d",ucAccelerateMode);
    vBsp_LCD_DispStringAtBottom(lucText,3,ucBsp_GetFlashFlag());    /**/

    /*这个函数会和设置单位的函数交叉调用，这个函数里面需要关闭这两个单位的显示*/
    vBsp_LCD_DispICO_MPH(OFF);
    vBsp_LCD_DispICO_KPH(OFF);
}
/******************************************************************************
** 功  能：显示设置驱动模式
** 参  数：ucDriveMode-驱动模式。0-双驱，1-前驱，2-后驱
** 返回值：无
** 备  注：
******************************************************************************/
void vBsp_LCD_DispSetDriveMode(uint8_t ucDriveMode)
{
    char lucText[7];
    /*防止超量程显示错误*/
    if(ucDriveMode > 2)
    {
        ucDriveMode = 2;
    }
    vBsp_LCD_DispStringAtBottom("DR-",0,ON);     /*左侧顶格，显示BL-，*/
    sprintf(lucText,"%d",ucDriveMode);
    vBsp_LCD_DispStringAtBottom(lucText,3,ucBsp_GetFlashFlag());    /**/

    /*这个函数会和设置单位的函数交叉调用，这个函数里面需要关闭这两个单位的显示*/
    vBsp_LCD_DispICO_MPH(OFF);
    vBsp_LCD_DispICO_KPH(OFF);
}
/******************************************************************************
** 功  能：显示轮径调节界面
** 参  数：Wheel-轮径值，精度0.1,Type-显示类型，0-都不闪烁，1-LD闪烁，数值不闪，2-LD不闪，数值闪烁
** 返回值：无
** 备  注：
******************************************************************************/void vBsp_LCD_DispSetWheel(uint16_t Wheel,uint8_t Type)
{
    char lucText[7] = {0};
    uint8_t lucFlash_Flag_Text;
    uint8_t lucFlash_Flag_Value;

    if(Type == 0)
    {
        lucFlash_Flag_Text  = ON;
        lucFlash_Flag_Value = ON;
    }
    else if(Type == 1)
    {
        lucFlash_Flag_Text  = ucBsp_GetFlashFlag();
        lucFlash_Flag_Value = ON;
    }
    else
    {
        lucFlash_Flag_Text  = ON;
        lucFlash_Flag_Value = ucBsp_GetFlashFlag();
    }

    vBsp_LCD_DispStringAtSpeed("LD",lucFlash_Flag_Text);        /*速度区，显示LD字样，代表轮径*/


    //vBsp_LCD_DispNumber(Wheel,10,lucFlash_Flag_Value);


    vBsp_LCD_DispICO_KPH(OFF);
    vBsp_LCD_DispICO_MPH(OFF);


    if(Wheel < 360)
    {
        /*传入的值小于360，表示要按照英寸来显示*/
        if(Wheel == 275)
        {
            if(CONFIG_27INCH_DISPLAY == DISPLAY_700C)
            {
                /*按照700C显示*/
                vBsp_LCD_DispStringAtBottom("  700C",0,lucFlash_Flag_Value);
            }
            else
            {
                /*按照27.5显示*/
                vBsp_LCD_DispNumber(275,10,lucFlash_Flag_Value);
            }
        }
        else
        {
            /*其它轮径值，只显示2位*/
            //sprintf(lucText,"%02dinch",Wheel / 10);
            sprintf(lucText,"%02dinch",Wheel / 10);
            vBsp_LCD_DispStringAtBottom(lucText,0,lucFlash_Flag_Value);
        }
    }
    else
    {
        /*传入的值大于360，认为是特殊轮径或者直径，直接显示数字，去掉最后一位*/
        vBsp_LCD_DispNumber(Wheel / 10,1,lucFlash_Flag_Value);
    }


    return;
}

/******************************************************************************
** 功  能：显示限速调节界面
** 参  数：LimitSpeed-限速值，Unit-公英制,Type-显示类型，0-都不闪烁，1-LS闪烁，数值不闪，2-LS不闪，数值闪烁
** 返回值：无
** 备  注：
******************************************************************************/
void vBsp_LCD_DispSetLimitSpeed(uint16_t LimitSpeed,uint8_t Unit,uint8_t Type)
{
    uint8_t lucFlash_Flag_Text;
    uint8_t lucFlash_Flag_Value;

    if(Type == 0)
    {
        lucFlash_Flag_Text  = ON;
        lucFlash_Flag_Value = ON;
    }
    else if(Type == 1)
    {
        lucFlash_Flag_Text  = ucBsp_GetFlashFlag();
        lucFlash_Flag_Value = ON;
    }
    else
    {
        lucFlash_Flag_Text  = ON;
        lucFlash_Flag_Value = ucBsp_GetFlashFlag();
    }

    vBsp_LCD_DispStringAtSpeed("LS",lucFlash_Flag_Text);        /*速度区显示LS字样，表示限速*/
    if(Unit == 0)
    {
        vBsp_LCD_DispNumber(LimitSpeed,1,lucFlash_Flag_Value);      /*底部区域显示限速值，精度1*/
        vBsp_LCD_DispICO_KPH(ON);
        vBsp_LCD_DispICO_MPH(OFF);
    }
    else
    {
        vBsp_LCD_DispNumber(((LimitSpeed * 6214) + 5000) / 10000,1,lucFlash_Flag_Value);      /*底部区域显示限速值，精度1，换算过程做四舍五入*/
        vBsp_LCD_DispICO_KPH(OFF);
        vBsp_LCD_DispICO_MPH(ON);
    }

}

/******************************************************************************
** 功  能：底部显示密码
** 参  数：Password-密码值，4位数字，FlashBit-要闪烁显示的位，左起0-3
** 返回值：无
** 备  注：
******************************************************************************/
void vBsp_LCD_DispPasswordNum(uint16_t Password,uint8_t FlashBit)
{
    char lucText[5] = {0};
    char lucString[2] = {0};
    uint8_t n;

    lucText[0] = '0' + Password / 1000;
    lucText[1] = '0' + Password % 1000 / 100;
    lucText[2] = '0' + Password % 100 / 10;
    lucText[3] = '0' + Password % 10;

    for(n = 0; n < 4; n++)
    {
        lucString[0] = lucText[n];
        if(n == FlashBit)
        {
            vBsp_LCD_DispStringAtBottom(lucString,n,ucBsp_GetFlashFlag());
        }
        else
        {
            vBsp_LCD_DispStringAtBottom(lucString,n,ON);
        }
    }
}

/******************************************************************************
** 功  能：充电状态显示
** 参  数：Value
** 返回值：无
******************************************************************************/
void vBsp_LCD_DispCharging(uint8_t Value)
{
    if(Value >= 5)
    {
        vBsp_LCD_DispBatteryBar(5,ON);
    }
    else if(Value >= 4)
    {
        vBsp_LCD_DispBatteryBar(4,ON);
    }
    else if(Value >= 3)
    {
        vBsp_LCD_DispBatteryBar(3,ON);
    }
    else if(Value >= 2)
    {
        vBsp_LCD_DispBatteryBar(2,ON);
    }
    else if(Value >= 1)
    {
        vBsp_LCD_DispBatteryBar(1,ON);
    }
    else
    {
        vBsp_LCD_DispBatteryBar(0,ON);
    }
}

/******************************************************************************
** 功  能：显示速度的圆环
** 参  数：ucValue-显示多少段,共25段，OnOff-是否显示，0-不显示，1-显示
** 返回值：无
** 备  注：
******************************************************************************/
void vBsp_LCD_DispSpeedCircle(uint8_t ucValue,uint8_t OnOff)
{
    if(ucValue>25)
    {
        ucValue = 25;
    }

    HAL_TIM_Base_Stop_IT(&htim17);/*防止代码运行到一半时刷新*/

    ICO_CIRCLE_INSIDE_ON;
    ICO_CIRCLE_OUTSIDE_ON;


    /*关闭所有段*/
    gucLCD_Buffer[14] = 0;/*X7--X14*/
    gucLCD_Buffer[15] &= (3 << 4); /*X15--X18,X30,X31*/
    gucLCD_Buffer[16] = 0;/*X22--X29*/
    X19_OFF;
    X20_OFF;
    X21_OFF;

    switch(ucValue)
    {
    case 25:
    {
        X31_ON;
    }
    case 24:
    {
        X30_ON;
    }
    case 23:
    {
        X29_ON;
    }
    case 22:
    {
        X28_ON;
    }
    case 21:
    {
        X27_ON;
    }
    case 20:
    {
        X26_ON;
    }
    case 19:
    {
        X25_ON;
    }
    case 18:
    {
        X24_ON;
    }
    case 17:
    {
        X23_ON;
    }
    case 16:
    {
        X22_ON;
    }
    case 15:
    {
        X21_ON;
    }
    case 14:
    {
        X20_ON;
    }
    case 13:
    {
        X19_ON;
    }
    case 12:
    {
        X18_ON;
    }
    case 11:
    {
        X17_ON;
    }
    case 10:
    {
        X16_ON;
    }
    case 9:
    {
        X15_ON;
    }
    case 8:
    {
        X14_ON;
    }
    case 7:
    {
        X13_ON;
    }
    case 6:
    {
        X12_ON;
    }
    case 5:
    {
        X11_ON;
    }
    case 4:
    {
        X10_ON;
    }
    case 3:
    {
        X9_ON;
    }
    case 2:
    {
        X8_ON;
    }
    case 1:
    {
        X7_ON;
    }
    case 0:
    {
        break;
    }
    }

    HAL_TIM_Base_Start_IT(&htim17);

}